package com.anfeng.cms.service.impl.manager;

import com.anfeng.cms.common.Common;
import com.anfeng.cms.domain.manager.AfManagerInfo;
import com.anfeng.cms.repository.mysql.dao.manager.AfManagerInfoMapper;
import com.anfeng.cms.service.manager.IAfManagerInfoService;
import com.anfeng.cms.util.CryptoUtil;
import com.anfeng.cms.util.IdGeneratorUtil;
import com.anfeng.cms.util.JsonMapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author 吴朋
 * @since 2019-07-15
 */
@Service
@Slf4j
public class AfManagerInfoServiceImpl extends ServiceImpl<AfManagerInfoMapper, AfManagerInfo> implements IAfManagerInfoService {

    /**
     * 新增管理员
     *
     * @param managerInfo 管理员信息
     * @return 管理员id
     */
    @Override
    public String addManager(AfManagerInfo managerInfo) {
        if (null == managerInfo) {
            log.error("新增管理员信息 传入参数出错");
            return null;
        }
        // 根据手机号验证是否存在管理员信息
        AfManagerInfo afManagerInfo = this.getManagerInfoByMobile(managerInfo.getMobile());
        if (afManagerInfo != null) {
            log.info("新增管理员已存在 新增管理员的信息是 {}", JsonMapper.defaultMapper().toJson(managerInfo));
            return afManagerInfo.getId();
        }
        // 不存在 就添加
        afManagerInfo = new AfManagerInfo();
        BeanUtils.copyProperties(managerInfo, afManagerInfo);

        String mangerId = IdGeneratorUtil.uuid();
        afManagerInfo.setId(mangerId);
        Date currentDate = new Date();
        afManagerInfo.setCreateTime(currentDate);
        afManagerInfo.setModifiedTime(currentDate);
        boolean insert = this.insert(afManagerInfo);
        if (!insert) {
            log.error("新增管理员信息失败 {}", JsonMapper.defaultMapper().toJson(afManagerInfo));
            return null;
        }
        return mangerId;
    }

    /**
     * 根据手机号获取管理员信息
     *
     * @param mobile 手机号
     * @return 管理员信息
     */
    @Override
    public AfManagerInfo getManagerInfoByMobile(String mobile) {
        if (StringUtils.isBlank(mobile)) {
            log.error("查询管理员信息 传入手机号 为空");
            return null;
        }
        AfManagerInfo afManagerInfo = new AfManagerInfo();
        afManagerInfo.setState(Common.DATA_STATE_NORMAL);
        afManagerInfo.setMobile(mobile);
        EntityWrapper<AfManagerInfo> wrapper = new EntityWrapper<>();
        wrapper.setEntity(afManagerInfo);
        return this.selectOne(wrapper);
    }

    /**
     * 后台管理员登录 使用手机号和密码登录
     *
     * @param mobile   手机号
     * @param password
     * @return
     */
    @Override
    public AfManagerInfo login(String mobile, String password) {
        if (StringUtils.isBlank(mobile) || StringUtils.isBlank(password)) {
            log.error("管理员登录 未输入手机号或密码");
            return null;
        }
        // 查询管理员信息
        AfManagerInfo managerInfo = this.getManagerInfoByMobile(mobile);
        if (null == managerInfo) {
            return null;
        }
        String dbPassword = managerInfo.getPassword();
        String shaPassword = CryptoUtil.sha256(password);
        if (!dbPassword.equals(shaPassword)) {
            return null;
        }
        return managerInfo;
    }
}
